#ifndef _OC_VOLUME_SWAN3_H__
#define _OC_VOLUME_SWAN3_H__

#include "VolumeObject.h"

namespace OCPP
{
    namespace Volume
    {
		struct swan3header
		{
            char label[4]; // 文件固定标识：MOC
            char version[4];
            int fileBytes; //包含头信息在内的文件字节数，不超过2M
            short mosaicId;
            short coordinate; //坐标类型:,2=笛卡儿坐标,3=等经纬网格坐标
            char varname[8]; // 产品代码,如:,ET,VIL,CR,CAP,OHP,OHPC
            char description[64]; // 产品描述，如Composite,Reflectivity,mosaic
            int blockPos; // 产品数据起始位置(字节顺序)
            int blockLen; // 产品数据字节数
            int timeZone; // 数据时钟,0=世界时,28800=北京时
            short year; // 观测时间中的年份
            short month;
            short day;
            short hour;
            short min;
            short sec;
            int observeSeconds; // 观测时间，单位：秒（ObsDates当天0时为起始计数基准点）
            uint16 observeDates; // 观测时间，单位：天（1970年1月1日为起始计数基准点）
            uint16 genDates; // 产品处理完成时间，单位：天（1970年1月1日为起始计数基准点）
            int genSeconds; // 产品处理完成时间，单位：秒（GenDates当天0时为起始计数基准点）
            int edge_s;
            int edge_w;
            int edge_n; //数据区的北边界，单位：1/1000度，放大1千倍
            int edge_e; 
            int cx; //数据区中心坐标，单位：1/1000度，放大1千倍
            int cy; //数据区中心坐标，单位：1/1000度，放大1千倍
            int nX; //格点坐标列数
            int nY;
            int dx; //格点坐标为列分辨率，单位：1/10000度，放大1万倍
            int dy; //格点坐标为列分辨率，单位：1/10000度，放大1万倍
            int16 height; //等高面海拔高度（三维），其它产品为0
            int16 Compress; //数据压缩标识,0=无,1=bz2,2=zip,3=lzw,,
            int numRadars; // 参与拼图的雷达数量
            int unzipBytes;
            int16 scale; //数值的放大倍数，放大10倍
            int16 unUsed;
            char rgnId[8]; //区域编号
            char units[8]; //数值单位
            char reserved[60];
        };

        class _volumeExport Swan3 : public CVolumeObject
        {
        public:
			bool convert(String fileName);
			bool convert(std::istream& sstream);
            bool splitLOD(String fileName, String outPath, Uint8Vector& crefData);
        private:
            bool readHeader(std::istream& sstream,String outPath, Uint8Vector& crefData);
            int                 mImageS;
            int                 mImageT;
            int                 mImageR;
            swan3header         header;
            std::vector<uint8>  mBuffer;
        };
    }
}

#endif // !_OC_VOLUME_SWAN_H__




